package com.en.controller;

import com.en.model.User;
import com.en.response.ErrorCodeMsgEnum;
import com.en.response.R;
import com.en.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * ClassName: userController
 * Package: com.tencent.wxcloudrun.controller
 * Description:
 *
 * @Date: 2023/11/19 08:07
 * @Author: wht
 */


//注意：
//    1. 请求进来后第一件事就是判断参数是否为空（最好在服务器的最前端先判断请求本身的大小，担心：如果请求本身数据量非常大，那么就会占用非常多的服务器内存）
//    2. 判断两个值是否相等时一定要判断null，因为null == null 为true
//    3. 所有数据只要status为负数就代表对用户透明不可见，只有管理员才能看到


@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    UserService userService;

    //    实现方式：
    //    1. 通过一套代码自动生成100张图片。
    //    2. 采用Map方式key为code码，value为图片路径，然后把这个Map保存到内存中
    //    3. 并且把这套代码做成定时器，每天晚上运行一次更新这100张图片。（不更新应该也可以！）
    @GetMapping("/get_img_code")
    public <T> R<T> sendSms() {
//        1. 随机从100个code中选一个
//        2. 把"用户id+img_code"和这个code码组成键值对存到redis中,定时：5分钟
//        3. 把图片的路径返回客户端
        return R.error(ErrorCodeMsgEnum.SERVICE_ERROR);
    }

    @GetMapping("/send_sms")
    public <T> R<T> sendSms(@RequestParam(required = true, value = "mobile") String mobile, @RequestParam(required = true, value = "img_code") String img_code) {
//        1. 根据"用户id+img_code"从redis中拿到code码，然后判断是否等于img_code
//        2. 判断该手机号的发送次数
//        3. 随机生成6个数字，并且把这6个数字和mobile组成键值对存到redis中，定时：5分钟
//        3. 发送短信
//        4. 更新redis中该手机号的发送次数（而且这个数据有定时：24小时）
//        5. 返回成功（不用等发送短信的响应结果）
        return R.error(ErrorCodeMsgEnum.SERVICE_ERROR);
    }


    @GetMapping("/login")
    public <T> R<T> login(@RequestParam(required = true, value = "mobile") String mobile, @RequestParam(required = true, value = "sms_code") String sms_code) {
//        1. 从redis中根据mobile拿到sms_code，然后判断和客户端发过来的sms_code是否相等
//        2. 根据mobile从数据库中查询user。如果没有就insert
//        3. 把所有的用户信息全部存到redis中的用户id
//        4. 返回用户的部分信息（客户端通过用户的信息是否有缺失来判断用户当前出于什么阶段：刚注册，还没完全注册成功）

        User user = userService.getUserByMobile(mobile);
        return R.successData(user);
    }


    @GetMapping("/get_user")
    public <T> R<T> getUser() {
        User res_user = userService.getUser();
        return R.successData(res_user);
    }

    @PatchMapping("/update_user")
    public <T> R<T> updateUser(@RequestBody User user) {
//        1. 从ThreadLocal拿到用户的id
//        2. 根据id更新数据库
//        3. 更新redis
//        4. 把最新的用户信息返回给客户端
        return R.error(ErrorCodeMsgEnum.SERVICE_ERROR);
    }
}
